vulkan: Rename blend pipeline to texture
authorMatthias Clasen <mclasen@redhat.com>
Sat, 30 Sep 2017 02:24:53 +0000 (22:24 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 30 Sep 2017 03:08:09 +0000 (23:08 -0400)
This is what it does, and the name blend is easily
confused with blend-mode.

29 files changed:
gsk/gskvulkanblendpipeline.c [deleted file]
gsk/gskvulkanblendpipelineprivate.h [deleted file]
gsk/gskvulkanrender.c
gsk/gskvulkanrenderpass.c
gsk/gskvulkanrenderprivate.h
gsk/gskvulkantexturepipeline.c [new file with mode: 0644]
gsk/gskvulkantexturepipelineprivate.h [new file with mode: 0644]
gsk/meson.build
gsk/resources/vulkan/blend-clip-rounded.frag.spv [deleted file]
gsk/resources/vulkan/blend-clip-rounded.vert.spv [deleted file]
gsk/resources/vulkan/blend-clip.frag.spv [deleted file]
gsk/resources/vulkan/blend-clip.vert.spv [deleted file]
gsk/resources/vulkan/blend.frag [deleted file]
gsk/resources/vulkan/blend.frag.glsl [deleted file]
gsk/resources/vulkan/blend.frag.spv [deleted file]
gsk/resources/vulkan/blend.vert [deleted file]
gsk/resources/vulkan/blend.vert.glsl [deleted file]
gsk/resources/vulkan/blend.vert.spv [deleted file]
gsk/resources/vulkan/meson.build
gsk/resources/vulkan/texture-clip-rounded.frag.spv [new file with mode: 0644]
gsk/resources/vulkan/texture-clip-rounded.vert.spv [new file with mode: 0644]
gsk/resources/vulkan/texture-clip.frag.spv [new file with mode: 0644]
gsk/resources/vulkan/texture-clip.vert.spv [new file with mode: 0644]
gsk/resources/vulkan/texture.frag [new file with mode: 0644]
gsk/resources/vulkan/texture.frag.glsl [new file with mode: 0644]
gsk/resources/vulkan/texture.frag.spv [new file with mode: 0644]
gsk/resources/vulkan/texture.vert [new file with mode: 0644]
gsk/resources/vulkan/texture.vert.glsl [new file with mode: 0644]
gsk/resources/vulkan/texture.vert.spv [new file with mode: 0644]

diff --git a/gsk/gskvulkanblendpipeline.c b/gsk/gskvulkanblendpipeline.c
deleted file mode 100644 (file)
index 2bcd549..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#include "config.h"
-
-#include "gskvulkanblendpipelineprivate.h"
-
-struct _GskVulkanBlendPipeline
-{
-  GObject parent_instance;
-};
-
-typedef struct _GskVulkanBlendInstance GskVulkanBlendInstance;
-
-struct _GskVulkanBlendInstance
-{
-  float rect[4];
-  float tex_rect[4];
-};
-
-G_DEFINE_TYPE (GskVulkanBlendPipeline, gsk_vulkan_blend_pipeline, GSK_TYPE_VULKAN_PIPELINE)
-
-static const VkPipelineVertexInputStateCreateInfo *
-gsk_vulkan_blend_pipeline_get_input_state_create_info (GskVulkanPipeline *self)
-{
-  static const VkVertexInputBindingDescription vertexBindingDescriptions[] = {
-      {
-          .binding = 0,
-          .stride = sizeof (GskVulkanBlendInstance),
-          .inputRate = VK_VERTEX_INPUT_RATE_INSTANCE
-      }
-  };
-  static const VkVertexInputAttributeDescription vertexInputAttributeDescription[] = {
-      {
-          .location = 0,
-          .binding = 0,
-          .format = VK_FORMAT_R32G32B32A32_SFLOAT,
-          .offset = G_STRUCT_OFFSET (GskVulkanBlendInstance, rect),
-      },
-      {
-          .location = 1,
-          .binding = 0,
-          .format = VK_FORMAT_R32G32B32A32_SFLOAT,
-          .offset = G_STRUCT_OFFSET (GskVulkanBlendInstance, tex_rect),
-      }
-  };
-  static const VkPipelineVertexInputStateCreateInfo info = {
-      .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
-      .vertexBindingDescriptionCount = G_N_ELEMENTS (vertexBindingDescriptions),
-      .pVertexBindingDescriptions = vertexBindingDescriptions,
-      .vertexAttributeDescriptionCount = G_N_ELEMENTS (vertexInputAttributeDescription),
-      .pVertexAttributeDescriptions = vertexInputAttributeDescription
-  };
-
-  return &info;
-}
-
-static void
-gsk_vulkan_blend_pipeline_finalize (GObject *gobject)
-{
-  //GskVulkanBlendPipeline *self = GSK_VULKAN_BLEND_PIPELINE (gobject);
-
-  G_OBJECT_CLASS (gsk_vulkan_blend_pipeline_parent_class)->finalize (gobject);
-}
-
-static void
-gsk_vulkan_blend_pipeline_class_init (GskVulkanBlendPipelineClass *klass)
-{
-  GskVulkanPipelineClass *pipeline_class = GSK_VULKAN_PIPELINE_CLASS (klass);
-
-  G_OBJECT_CLASS (klass)->finalize = gsk_vulkan_blend_pipeline_finalize;
-
-  pipeline_class->get_input_state_create_info = gsk_vulkan_blend_pipeline_get_input_state_create_info;
-}
-
-static void
-gsk_vulkan_blend_pipeline_init (GskVulkanBlendPipeline *self)
-{
-}
-
-GskVulkanPipeline *
-gsk_vulkan_blend_pipeline_new (GdkVulkanContext        *context,
-                               VkPipelineLayout         layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
-{
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLEND_PIPELINE, context, layout, shader_name, render_pass);
-}
-
-gsize
-gsk_vulkan_blend_pipeline_count_vertex_data (GskVulkanBlendPipeline *pipeline)
-{
-  return sizeof (GskVulkanBlendInstance);
-}
-
-void
-gsk_vulkan_blend_pipeline_collect_vertex_data (GskVulkanBlendPipeline *pipeline,
-                                               guchar                 *data,
-                                               const graphene_rect_t  *rect,
-                                               const graphene_rect_t  *tex_rect)
-{
-  GskVulkanBlendInstance *instance = (GskVulkanBlendInstance *) data;
-
-  instance->rect[0] = rect->origin.x;
-  instance->rect[1] = rect->origin.y;
-  instance->rect[2] = rect->size.width;
-  instance->rect[3] = rect->size.height;
-  instance->tex_rect[0] = (rect->origin.x - tex_rect->origin.x)/tex_rect->size.width;
-  instance->tex_rect[1] = (rect->origin.y - tex_rect->origin.y)/tex_rect->size.height;
-  instance->tex_rect[2] = (rect->size.width + rect->origin.x - tex_rect->origin.x)/tex_rect->size.width;
-  instance->tex_rect[3] = (rect->size.height + rect->origin.y - tex_rect->origin.y)/tex_rect->size.height;
-}
-
-gsize
-gsk_vulkan_blend_pipeline_draw (GskVulkanBlendPipeline *pipeline,
-                                VkCommandBuffer         command_buffer,
-                                gsize                   offset,
-                                gsize                   n_commands)
-{
-  vkCmdDraw (command_buffer,
-             6, n_commands,
-             0, offset);
-
-  return n_commands;
-}
diff --git a/gsk/gskvulkanblendpipelineprivate.h b/gsk/gskvulkanblendpipelineprivate.h
deleted file mode 100644 (file)
index 678db00..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef __GSK_VULKAN_BLEND_PIPELINE_PRIVATE_H__
-#define __GSK_VULKAN_BLEND_PIPELINE_PRIVATE_H__
-
-#include <graphene.h>
-
-#include "gskvulkanpipelineprivate.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GskVulkanBlendPipelineLayout GskVulkanBlendPipelineLayout;
-
-#define GSK_TYPE_VULKAN_BLEND_PIPELINE (gsk_vulkan_blend_pipeline_get_type ())
-
-G_DECLARE_FINAL_TYPE (GskVulkanBlendPipeline, gsk_vulkan_blend_pipeline, GSK, VULKAN_BLEND_PIPELINE, GskVulkanPipeline)
-
-GskVulkanPipeline *     gsk_vulkan_blend_pipeline_new                   (GdkVulkanContext               *context,
-                                                                         VkPipelineLayout                layout,
-                                                                         const char                     *shader_name,
-                                                                         VkRenderPass                    render_pass);
-
-gsize                   gsk_vulkan_blend_pipeline_count_vertex_data     (GskVulkanBlendPipeline         *pipeline);
-void                    gsk_vulkan_blend_pipeline_collect_vertex_data   (GskVulkanBlendPipeline         *pipeline,
-                                                                         guchar                         *data,
-                                                                         const graphene_rect_t          *rect,
-                                                                         const graphene_rect_t          *tex_rect);
-gsize                   gsk_vulkan_blend_pipeline_draw                  (GskVulkanBlendPipeline         *pipeline,
-                                                                         VkCommandBuffer                 command_buffer,
-                                                                         gsize                           offset,
-                                                                         gsize                           n_commands);
-
-G_END_DECLS
-
-#endif /* __GSK_VULKAN_BLEND_PIPELINE_PRIVATE_H__ */
index c7aedd145be55e1b08947f648d521e58c06993c4..0dc0056a08473e54d7b24b079edb6819a098a8e8 100644 (file)
@@ -11,7 +11,6 @@
 #include "gskvulkanrenderpassprivate.h"
 
 #include "gskvulkanblendmodepipelineprivate.h"
-#include "gskvulkanblendpipelineprivate.h"
 #include "gskvulkanblurpipelineprivate.h"
 #include "gskvulkanborderpipelineprivate.h"
 #include "gskvulkanboxshadowpipelineprivate.h"
@@ -21,6 +20,7 @@
 #include "gskvulkaneffectpipelineprivate.h"
 #include "gskvulkanlineargradientpipelineprivate.h"
 #include "gskvulkantextpipelineprivate.h"
+#include "gskvulkantexturepipelineprivate.h"
 #include "gskvulkanpushconstantsprivate.h"
 
 #define DESCRIPTOR_POOL_MAXSETS 128
@@ -366,9 +366,9 @@ gsk_vulkan_render_get_pipeline (GskVulkanRender       *self,
     guint num_textures;
     GskVulkanPipeline * (* create_func) (GdkVulkanContext *context, VkPipelineLayout layout, const char *name, VkRenderPass render_pass);
   } pipeline_info[GSK_VULKAN_N_PIPELINES] = {
-    { "blend",                      1, gsk_vulkan_blend_pipeline_new },
-    { "blend-clip",                 1, gsk_vulkan_blend_pipeline_new },
-    { "blend-clip-rounded",         1, gsk_vulkan_blend_pipeline_new },
+    { "texture",                    1, gsk_vulkan_texture_pipeline_new },
+    { "texture-clip",               1, gsk_vulkan_texture_pipeline_new },
+    { "texture-clip-rounded",       1, gsk_vulkan_texture_pipeline_new },
     { "color",                      0, gsk_vulkan_color_pipeline_new },
     { "color-clip",                 0, gsk_vulkan_color_pipeline_new },
     { "color-clip-rounded",         0, gsk_vulkan_color_pipeline_new },
index 77f4fcd0e6fe9adfb166638925a4aab45b241192..1c2d05a9b7c3df49d2f7cad3cb1d7b74fd704007 100644 (file)
@@ -9,7 +9,6 @@
 #include "gskrendererprivate.h"
 #include "gskroundedrectprivate.h"
 #include "gskvulkanblendmodepipelineprivate.h"
-#include "gskvulkanblendpipelineprivate.h"
 #include "gskvulkanblurpipelineprivate.h"
 #include "gskvulkanborderpipelineprivate.h"
 #include "gskvulkanboxshadowpipelineprivate.h"
@@ -20,6 +19,7 @@
 #include "gskvulkaneffectpipelineprivate.h"
 #include "gskvulkanlineargradientpipelineprivate.h"
 #include "gskvulkantextpipelineprivate.h"
+#include "gskvulkantexturepipelineprivate.h"
 #include "gskvulkanimageprivate.h"
 #include "gskvulkanpushconstantsprivate.h"
 #include "gskvulkanrendererprivate.h"
@@ -338,11 +338,11 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass           *self,
       if (gsk_cairo_node_get_surface (node) == NULL)
         return;
       if (gsk_vulkan_clip_contains_rect (&constants->clip, &node->bounds))
-        pipeline_type = GSK_VULKAN_PIPELINE_BLEND;
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE;
       else if (constants->clip.type == GSK_VULKAN_CLIP_RECT)
-        pipeline_type = GSK_VULKAN_PIPELINE_BLEND_CLIP;
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP;
       else if (constants->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-        pipeline_type = GSK_VULKAN_PIPELINE_BLEND_CLIP_ROUNDED;
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
       else
         FALLBACK ("Cairo nodes can't deal with clip type %u\n", constants->clip.type);
       op.type = GSK_VULKAN_OP_SURFACE;
@@ -423,11 +423,11 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass           *self,
 
     case GSK_TEXTURE_NODE:
       if (gsk_vulkan_clip_contains_rect (&constants->clip, &node->bounds))
-        pipeline_type = GSK_VULKAN_PIPELINE_BLEND;
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE;
       else if (constants->clip.type == GSK_VULKAN_CLIP_RECT)
-        pipeline_type = GSK_VULKAN_PIPELINE_BLEND_CLIP;
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP;
       else if (constants->clip.type == GSK_VULKAN_CLIP_ROUNDED_CIRCULAR)
-        pipeline_type = GSK_VULKAN_PIPELINE_BLEND_CLIP_ROUNDED;
+        pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED;
       else
         FALLBACK ("Texture nodes can't deal with clip type %u\n", constants->clip.type);
       op.type = GSK_VULKAN_OP_TEXTURE;
@@ -622,7 +622,7 @@ fallback:
         g_assert_not_reached ();
         return;
     }
-  op.render.pipeline = gsk_vulkan_render_get_pipeline (render, GSK_VULKAN_PIPELINE_BLEND);
+  op.render.pipeline = gsk_vulkan_render_get_pipeline (render, GSK_VULKAN_PIPELINE_TEXTURE);
   g_array_append_val (self->render_ops, op);
 }
 #undef FALLBACK
@@ -959,7 +959,7 @@ gsk_vulkan_render_pass_count_vertex_data (GskVulkanRenderPass *self)
         case GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP:
         case GSK_VULKAN_OP_SURFACE:
         case GSK_VULKAN_OP_TEXTURE:
-          op->render.vertex_count = gsk_vulkan_blend_pipeline_count_vertex_data (GSK_VULKAN_BLEND_PIPELINE (op->render.pipeline));
+          op->render.vertex_count = gsk_vulkan_texture_pipeline_count_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline));
           n_bytes += op->render.vertex_count;
           break;
 
@@ -1053,7 +1053,7 @@ gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
         case GSK_VULKAN_OP_TEXTURE:
           {
             op->render.vertex_offset = offset + n_bytes;
-            gsk_vulkan_blend_pipeline_collect_vertex_data (GSK_VULKAN_BLEND_PIPELINE (op->render.pipeline),
+            gsk_vulkan_texture_pipeline_collect_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline),
                                                            data + n_bytes + offset,
                                                            &op->render.node->bounds,
                                                            &op->render.node->bounds);
@@ -1391,9 +1391,9 @@ gsk_vulkan_render_pass_draw_rect (GskVulkanRenderPass     *self,
                                    0,
                                    NULL);
 
-          current_draw_index += gsk_vulkan_blend_pipeline_draw (GSK_VULKAN_BLEND_PIPELINE (current_pipeline),
-                                                                command_buffer,
-                                                                current_draw_index, 1);
+          current_draw_index += gsk_vulkan_texture_pipeline_draw (GSK_VULKAN_TEXTURE_PIPELINE (current_pipeline),
+                                                                  command_buffer,
+                                                                  current_draw_index, 1);
           break;
 
         case GSK_VULKAN_OP_TEXT:
index d390c3c542e4ab2ff2cfc7120e92c66180ad0d42..c7647632d51b0dac93f0d306e09d2b2c409c5528 100644 (file)
@@ -12,9 +12,9 @@
 G_BEGIN_DECLS
 
 typedef enum {
-  GSK_VULKAN_PIPELINE_BLEND,
-  GSK_VULKAN_PIPELINE_BLEND_CLIP,
-  GSK_VULKAN_PIPELINE_BLEND_CLIP_ROUNDED,
+  GSK_VULKAN_PIPELINE_TEXTURE,
+  GSK_VULKAN_PIPELINE_TEXTURE_CLIP,
+  GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED,
   GSK_VULKAN_PIPELINE_COLOR,
   GSK_VULKAN_PIPELINE_COLOR_CLIP,
   GSK_VULKAN_PIPELINE_COLOR_CLIP_ROUNDED,
diff --git a/gsk/gskvulkantexturepipeline.c b/gsk/gskvulkantexturepipeline.c
new file mode 100644 (file)
index 0000000..83dae29
--- /dev/null
@@ -0,0 +1,122 @@
+#include "config.h"
+
+#include "gskvulkantexturepipelineprivate.h"
+
+struct _GskVulkanTexturePipeline
+{
+  GObject parent_instance;
+};
+
+typedef struct _GskVulkanTextureInstance GskVulkanTextureInstance;
+
+struct _GskVulkanTextureInstance
+{
+  float rect[4];
+  float tex_rect[4];
+};
+
+G_DEFINE_TYPE (GskVulkanTexturePipeline, gsk_vulkan_texture_pipeline, GSK_TYPE_VULKAN_PIPELINE)
+
+static const VkPipelineVertexInputStateCreateInfo *
+gsk_vulkan_texture_pipeline_get_input_state_create_info (GskVulkanPipeline *self)
+{
+  static const VkVertexInputBindingDescription vertexBindingDescriptions[] = {
+      {
+          .binding = 0,
+          .stride = sizeof (GskVulkanTextureInstance),
+          .inputRate = VK_VERTEX_INPUT_RATE_INSTANCE
+      }
+  };
+  static const VkVertexInputAttributeDescription vertexInputAttributeDescription[] = {
+      {
+          .location = 0,
+          .binding = 0,
+          .format = VK_FORMAT_R32G32B32A32_SFLOAT,
+          .offset = G_STRUCT_OFFSET (GskVulkanTextureInstance, rect),
+      },
+      {
+          .location = 1,
+          .binding = 0,
+          .format = VK_FORMAT_R32G32B32A32_SFLOAT,
+          .offset = G_STRUCT_OFFSET (GskVulkanTextureInstance, tex_rect),
+      }
+  };
+  static const VkPipelineVertexInputStateCreateInfo info = {
+      .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
+      .vertexBindingDescriptionCount = G_N_ELEMENTS (vertexBindingDescriptions),
+      .pVertexBindingDescriptions = vertexBindingDescriptions,
+      .vertexAttributeDescriptionCount = G_N_ELEMENTS (vertexInputAttributeDescription),
+      .pVertexAttributeDescriptions = vertexInputAttributeDescription
+  };
+
+  return &info;
+}
+
+static void
+gsk_vulkan_texture_pipeline_finalize (GObject *gobject)
+{
+  //GskVulkanTexturePipeline *self = GSK_VULKAN_TEXTURE_PIPELINE (gobject);
+
+  G_OBJECT_CLASS (gsk_vulkan_texture_pipeline_parent_class)->finalize (gobject);
+}
+
+static void
+gsk_vulkan_texture_pipeline_class_init (GskVulkanTexturePipelineClass *klass)
+{
+  GskVulkanPipelineClass *pipeline_class = GSK_VULKAN_PIPELINE_CLASS (klass);
+
+  G_OBJECT_CLASS (klass)->finalize = gsk_vulkan_texture_pipeline_finalize;
+
+  pipeline_class->get_input_state_create_info = gsk_vulkan_texture_pipeline_get_input_state_create_info;
+}
+
+static void
+gsk_vulkan_texture_pipeline_init (GskVulkanTexturePipeline *self)
+{
+}
+
+GskVulkanPipeline *
+gsk_vulkan_texture_pipeline_new (GdkVulkanContext *context,
+                                 VkPipelineLayout  layout,
+                                 const char       *shader_name,
+                                 VkRenderPass      render_pass)
+{
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_TEXTURE_PIPELINE, context, layout, shader_name, render_pass);
+}
+
+gsize
+gsk_vulkan_texture_pipeline_count_vertex_data (GskVulkanTexturePipeline *pipeline)
+{
+  return sizeof (GskVulkanTextureInstance);
+}
+
+void
+gsk_vulkan_texture_pipeline_collect_vertex_data (GskVulkanTexturePipeline *pipeline,
+                                                 guchar                   *data,
+                                                 const graphene_rect_t    *rect,
+                                                 const graphene_rect_t    *tex_rect)
+{
+  GskVulkanTextureInstance *instance = (GskVulkanTextureInstance *) data;
+
+  instance->rect[0] = rect->origin.x;
+  instance->rect[1] = rect->origin.y;
+  instance->rect[2] = rect->size.width;
+  instance->rect[3] = rect->size.height;
+  instance->tex_rect[0] = (rect->origin.x - tex_rect->origin.x)/tex_rect->size.width;
+  instance->tex_rect[1] = (rect->origin.y - tex_rect->origin.y)/tex_rect->size.height;
+  instance->tex_rect[2] = (rect->size.width + rect->origin.x - tex_rect->origin.x)/tex_rect->size.width;
+  instance->tex_rect[3] = (rect->size.height + rect->origin.y - tex_rect->origin.y)/tex_rect->size.height;
+}
+
+gsize
+gsk_vulkan_texture_pipeline_draw (GskVulkanTexturePipeline *pipeline,
+                                  VkCommandBuffer           command_buffer,
+                                  gsize                     offset,
+                                  gsize                     n_commands)
+{
+  vkCmdDraw (command_buffer,
+             6, n_commands,
+             0, offset);
+
+  return n_commands;
+}
diff --git a/gsk/gskvulkantexturepipelineprivate.h b/gsk/gskvulkantexturepipelineprivate.h
new file mode 100644 (file)
index 0000000..c6435c4
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef __GSK_VULKAN_TEXTURE_PIPELINE_PRIVATE_H__
+#define __GSK_VULKAN_TEXTURE_PIPELINE_PRIVATE_H__
+
+#include <graphene.h>
+
+#include "gskvulkanpipelineprivate.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GskVulkanTexturePipelineLayout GskVulkanTexturePipelineLayout;
+
+#define GSK_TYPE_VULKAN_TEXTURE_PIPELINE (gsk_vulkan_texture_pipeline_get_type ())
+
+G_DECLARE_FINAL_TYPE (GskVulkanTexturePipeline, gsk_vulkan_texture_pipeline, GSK, VULKAN_TEXTURE_PIPELINE, GskVulkanPipeline)
+
+GskVulkanPipeline *     gsk_vulkan_texture_pipeline_new                 (GdkVulkanContext         *context,
+                                                                         VkPipelineLayout          layout,
+                                                                         const char               *shader_name,
+                                                                         VkRenderPass              render_pass);
+
+gsize                   gsk_vulkan_texture_pipeline_count_vertex_data   (GskVulkanTexturePipeline *pipeline);
+void                    gsk_vulkan_texture_pipeline_collect_vertex_data (GskVulkanTexturePipeline *pipeline,
+                                                                         guchar                   *data,
+                                                                         const graphene_rect_t    *rect,
+                                                                         const graphene_rect_t    *tex_rect);
+gsize                   gsk_vulkan_texture_pipeline_draw                (GskVulkanTexturePipeline *pipeline,
+                                                                         VkCommandBuffer           command_buffer,
+                                                                         gsize                     offset,
+                                                                         gsize                     n_commands);
+
+G_END_DECLS
+
+#endif /* __GSK_VULKAN_TEXTURE_PIPELINE_PRIVATE_H__ */
index e91985af8ecc7e70130cd349ceb10f8867643a4a..a86e1566b6f14f260c58bc399ed066d26709c45a 100644 (file)
@@ -55,7 +55,6 @@ gsk_private_vulkan_compiled_shaders_deps = []
 if have_vulkan
   gsk_private_sources += files([
     'gskvulkanblendmodepipeline.c',
-    'gskvulkanblendpipeline.c',
     'gskvulkanblurpipeline.c',
     'gskvulkanborderpipeline.c',
     'gskvulkanboxshadowpipeline.c',
@@ -70,6 +69,7 @@ if have_vulkan
     'gskvulkanlineargradientpipeline.c',
     'gskvulkanimage.c',
     'gskvulkantextpipeline.c',
+    'gskvulkantexturepipeline.c',
     'gskvulkanmemory.c',
     'gskvulkanpipeline.c',
     'gskvulkanpushconstants.c',
diff --git a/gsk/resources/vulkan/blend-clip-rounded.frag.spv b/gsk/resources/vulkan/blend-clip-rounded.frag.spv
deleted file mode 100644 (file)
index 8b4b3b3..0000000
Binary files a/gsk/resources/vulkan/blend-clip-rounded.frag.spv and /dev/null differ
diff --git a/gsk/resources/vulkan/blend-clip-rounded.vert.spv b/gsk/resources/vulkan/blend-clip-rounded.vert.spv
deleted file mode 100644 (file)
index cb6a9da..0000000
Binary files a/gsk/resources/vulkan/blend-clip-rounded.vert.spv and /dev/null differ
diff --git a/gsk/resources/vulkan/blend-clip.frag.spv b/gsk/resources/vulkan/blend-clip.frag.spv
deleted file mode 100644 (file)
index 9d337c7..0000000
Binary files a/gsk/resources/vulkan/blend-clip.frag.spv and /dev/null differ
diff --git a/gsk/resources/vulkan/blend-clip.vert.spv b/gsk/resources/vulkan/blend-clip.vert.spv
deleted file mode 100644 (file)
index cb6a9da..0000000
Binary files a/gsk/resources/vulkan/blend-clip.vert.spv and /dev/null differ
diff --git a/gsk/resources/vulkan/blend.frag b/gsk/resources/vulkan/blend.frag
deleted file mode 100644 (file)
index ee9eb45..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#version 420 core
-
-#include "clip.frag.glsl"
-
-layout(location = 0) in vec2 inPos;
-layout(location = 1) in vec2 inTexCoord;
-
-layout(set = 0, binding = 0) uniform sampler2D inTexture;
-
-layout(location = 0) out vec4 color;
-
-void main()
-{
-  color = clip (inPos, texture (inTexture, inTexCoord));
-}
diff --git a/gsk/resources/vulkan/blend.frag.glsl b/gsk/resources/vulkan/blend.frag.glsl
deleted file mode 100644 (file)
index 4575c49..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#version 420 core
-
-layout(location = 0) in vec2 inTexCoord;
-
-layout(set = 0, binding = 0) uniform sampler2D inTexture;
-
-layout(location = 0) out vec4 color;
-
-void main()
-{
-  color = texture (inTexture, inTexCoord);
-}
diff --git a/gsk/resources/vulkan/blend.frag.spv b/gsk/resources/vulkan/blend.frag.spv
deleted file mode 100644 (file)
index 9d337c7..0000000
Binary files a/gsk/resources/vulkan/blend.frag.spv and /dev/null differ
diff --git a/gsk/resources/vulkan/blend.vert b/gsk/resources/vulkan/blend.vert
deleted file mode 100644 (file)
index c9bbb40..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#version 420 core
-
-#include "clip.vert.glsl"
-
-layout(location = 0) in vec4 inRect;
-layout(location = 1) in vec4 inTexRect;
-
-layout(location = 0) out vec2 outPos;
-layout(location = 1) out vec2 outTexCoord;
-
-out gl_PerVertex {
-  vec4 gl_Position;
-};
-
-vec2 offsets[6] = { vec2(0.0, 0.0),
-                    vec2(1.0, 0.0),
-                    vec2(0.0, 1.0),
-                    vec2(0.0, 1.0),
-                    vec2(1.0, 0.0),
-                    vec2(1.0, 1.0) };
-
-void main() {
-  vec4 rect = clip (inRect);
-  vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex];
-  gl_Position = push.mvp * vec4 (pos, 0.0, 1.0);
-
-  outPos = pos;
-
-  vec4 texrect = vec4((rect.xy - inRect.xy) / inRect.zw,
-                      rect.zw / inRect.zw);
-  texrect = vec4(inTexRect.xy + inTexRect.zw * texrect.xy,
-                 inTexRect.zw * texrect.zw);
-  outTexCoord = texrect.xy + texrect.zw * offsets[gl_VertexIndex];
-}
diff --git a/gsk/resources/vulkan/blend.vert.glsl b/gsk/resources/vulkan/blend.vert.glsl
deleted file mode 100644 (file)
index 17be873..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#version 420 core
-
-#include "constants.glsl"
-
-layout(location = 0) in vec4 inRect;
-layout(location = 1) in vec4 inTexRect;
-
-layout(location = 0) out vec2 outTexCoord;
-
-out gl_PerVertex {
-  vec4 gl_Position;
-};
-
-vec2 offsets[6] = { vec2(0.0, 0.0),
-                    vec2(1.0, 0.0),
-                    vec2(0.0, 1.0),
-                    vec2(0.0, 1.0),
-                    vec2(1.0, 0.0),
-                    vec2(1.0, 1.0) };
-
-void main() {
-  vec2 pos = inRect.xy + inRect.zw * offsets[gl_VertexIndex];
-  gl_Position = push.mvp * vec4 (pos, 0.0, 1.0);
-
-  outTexCoord = inTexRect.xy + inTexRect.zw * offsets[gl_VertexIndex];
-}
diff --git a/gsk/resources/vulkan/blend.vert.spv b/gsk/resources/vulkan/blend.vert.spv
deleted file mode 100644 (file)
index e814653..0000000
Binary files a/gsk/resources/vulkan/blend.vert.spv and /dev/null differ
index 160bc0d6e4188a528d047abe92276c4a27b456ae..3486a8868b45d785f06277dfef255a4a24bd00a9 100644 (file)
@@ -7,7 +7,6 @@
 #]
 
 gsk_private_vulkan_fragment_shaders = [
-  'blend.frag',
   'blendmode.frag',
   'blur.frag',
   'border.frag',
@@ -18,10 +17,10 @@ gsk_private_vulkan_fragment_shaders = [
   'linear.frag',
   'mask.frag',
   'outset-shadow.frag',
+  'texture.frag',
 ]
 
 gsk_private_vulkan_vertex_shaders = [
-  'blend.vert',
   'blendmode.vert',
   'blur.vert',
   'border.vert',
@@ -32,6 +31,7 @@ gsk_private_vulkan_vertex_shaders = [
   'linear.vert',
   'mask.vert',
   'outset-shadow.vert',
+  'texture.vert',
 ]
 
 gsk_private_vulkan_shaders += gsk_private_vulkan_fragment_shaders
diff --git a/gsk/resources/vulkan/texture-clip-rounded.frag.spv b/gsk/resources/vulkan/texture-clip-rounded.frag.spv
new file mode 100644 (file)
index 0000000..8b4b3b3
Binary files /dev/null and b/gsk/resources/vulkan/texture-clip-rounded.frag.spv differ
diff --git a/gsk/resources/vulkan/texture-clip-rounded.vert.spv b/gsk/resources/vulkan/texture-clip-rounded.vert.spv
new file mode 100644 (file)
index 0000000..cb6a9da
Binary files /dev/null and b/gsk/resources/vulkan/texture-clip-rounded.vert.spv differ
diff --git a/gsk/resources/vulkan/texture-clip.frag.spv b/gsk/resources/vulkan/texture-clip.frag.spv
new file mode 100644 (file)
index 0000000..9d337c7
Binary files /dev/null and b/gsk/resources/vulkan/texture-clip.frag.spv differ
diff --git a/gsk/resources/vulkan/texture-clip.vert.spv b/gsk/resources/vulkan/texture-clip.vert.spv
new file mode 100644 (file)
index 0000000..cb6a9da
Binary files /dev/null and b/gsk/resources/vulkan/texture-clip.vert.spv differ
diff --git a/gsk/resources/vulkan/texture.frag b/gsk/resources/vulkan/texture.frag
new file mode 100644 (file)
index 0000000..ee9eb45
--- /dev/null
@@ -0,0 +1,15 @@
+#version 420 core
+
+#include "clip.frag.glsl"
+
+layout(location = 0) in vec2 inPos;
+layout(location = 1) in vec2 inTexCoord;
+
+layout(set = 0, binding = 0) uniform sampler2D inTexture;
+
+layout(location = 0) out vec4 color;
+
+void main()
+{
+  color = clip (inPos, texture (inTexture, inTexCoord));
+}
diff --git a/gsk/resources/vulkan/texture.frag.glsl b/gsk/resources/vulkan/texture.frag.glsl
new file mode 100644 (file)
index 0000000..4575c49
--- /dev/null
@@ -0,0 +1,12 @@
+#version 420 core
+
+layout(location = 0) in vec2 inTexCoord;
+
+layout(set = 0, binding = 0) uniform sampler2D inTexture;
+
+layout(location = 0) out vec4 color;
+
+void main()
+{
+  color = texture (inTexture, inTexCoord);
+}
diff --git a/gsk/resources/vulkan/texture.frag.spv b/gsk/resources/vulkan/texture.frag.spv
new file mode 100644 (file)
index 0000000..9d337c7
Binary files /dev/null and b/gsk/resources/vulkan/texture.frag.spv differ
diff --git a/gsk/resources/vulkan/texture.vert b/gsk/resources/vulkan/texture.vert
new file mode 100644 (file)
index 0000000..c9bbb40
--- /dev/null
@@ -0,0 +1,34 @@
+#version 420 core
+
+#include "clip.vert.glsl"
+
+layout(location = 0) in vec4 inRect;
+layout(location = 1) in vec4 inTexRect;
+
+layout(location = 0) out vec2 outPos;
+layout(location = 1) out vec2 outTexCoord;
+
+out gl_PerVertex {
+  vec4 gl_Position;
+};
+
+vec2 offsets[6] = { vec2(0.0, 0.0),
+                    vec2(1.0, 0.0),
+                    vec2(0.0, 1.0),
+                    vec2(0.0, 1.0),
+                    vec2(1.0, 0.0),
+                    vec2(1.0, 1.0) };
+
+void main() {
+  vec4 rect = clip (inRect);
+  vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex];
+  gl_Position = push.mvp * vec4 (pos, 0.0, 1.0);
+
+  outPos = pos;
+
+  vec4 texrect = vec4((rect.xy - inRect.xy) / inRect.zw,
+                      rect.zw / inRect.zw);
+  texrect = vec4(inTexRect.xy + inTexRect.zw * texrect.xy,
+                 inTexRect.zw * texrect.zw);
+  outTexCoord = texrect.xy + texrect.zw * offsets[gl_VertexIndex];
+}
diff --git a/gsk/resources/vulkan/texture.vert.glsl b/gsk/resources/vulkan/texture.vert.glsl
new file mode 100644 (file)
index 0000000..17be873
--- /dev/null
@@ -0,0 +1,26 @@
+#version 420 core
+
+#include "constants.glsl"
+
+layout(location = 0) in vec4 inRect;
+layout(location = 1) in vec4 inTexRect;
+
+layout(location = 0) out vec2 outTexCoord;
+
+out gl_PerVertex {
+  vec4 gl_Position;
+};
+
+vec2 offsets[6] = { vec2(0.0, 0.0),
+                    vec2(1.0, 0.0),
+                    vec2(0.0, 1.0),
+                    vec2(0.0, 1.0),
+                    vec2(1.0, 0.0),
+                    vec2(1.0, 1.0) };
+
+void main() {
+  vec2 pos = inRect.xy + inRect.zw * offsets[gl_VertexIndex];
+  gl_Position = push.mvp * vec4 (pos, 0.0, 1.0);
+
+  outTexCoord = inTexRect.xy + inTexRect.zw * offsets[gl_VertexIndex];
+}
diff --git a/gsk/resources/vulkan/texture.vert.spv b/gsk/resources/vulkan/texture.vert.spv
new file mode 100644 (file)
index 0000000..e814653
Binary files /dev/null and b/gsk/resources/vulkan/texture.vert.spv differ